package com.fit.spring.boot.aop.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.fit.spring.boot.aop.notice.GainType;
import com.fit.spring.boot.aop.notice.Notification;



/**
 * 通知注解
 * 可以注释在接口或者方法或者父类上
 * 
 * @author hcl
 *
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited//标注此注解是否能被继承
public @interface Notice {
	
	/**
	 * 需要通知的目标类
	 * @return
	 */
	Class<? extends Notification>[] noticeClass() default {};
	
	/**
	 * 需要通知的目标类名
	 * @return
	 */
	String[] noticeClassNames() default {};
	
	/**
	 * Notification类获取的方式
	 * @return
	 */
	GainType gainType() default GainType.AUTO;
	
}
